#include<iostream>
using namespace std;

//class Uncle
//{
//public:
//	virtual ~Uncle()
//	{
//
//	}
//	Uncle(int a, int n)
//		:_age(a)
//		, _num(n)
//	{
//		cout << "Uncle constructor called" << endl;
//	}
//	Uncle()
//		:Uncle(0,0)
//	{
//		cout << "Uncle default constructor callend" << endl;
//	}
//	virtual void print()
//	{
//		cout << "Uncle show called" << endl;
//	}
//private:
//	int _age;
//	int _num;
//};
//
//class Parent
//{
//public:
//	Parent(int a,int n)
//		:_age(a)
//		,_num(n)
//	{
//		cout << "Parent constructor called" << endl;
//	}
//	Parent()
//		:Parent(0,0)
//	{
//		cout << "default Parent cosntrctor" << endl;
//	}
//	virtual void print()
//	{
//		cout << "parent print" << endl;
//	}
//private:
//	int _age;
//	int _num;
//};
//class Child :public Parent,public Uncle
//{
//public:
//	Child(int a,int n,string name)
//		:Parent(a,n)
//		,_name(name)
//	{
//		cout << "Chilld constructor called" << endl;
//	}
//	Child()
//		:Child(0,0,"")
//	{
//		cout << "default child constructor called" << endl;
//	}
//	void print()
//	{
//		cout << "Child print" << endl;
//	}
//	void show()
//	{
//		cout << "child show:" << _name << endl;
//	}
//private:
//	string _name;
//};
//
//
//int main()
//{
//	Uncle* u1 = new Child();
//	Uncle* u2 = nullptr;
//	u1->print();//this
//	Child* c = dynamic_cast<Child*>(u1);
//	delete u1;
//	return 0;
//}
class Date
{
public:
	void print()
	{
		cout << "Date print " << endl;
	}
	void show()
	{
		cout << _age << endl;
	}
public:
	int _age;
};

int main()
{
	Date* ptr = nullptr;
	ptr->print();
	ptr->show();
	return 0;
}

//int main()
//{
//	Parent* p = new Child();
//	p->print();
//	Parent* p2 = new Parent();
//	Child* c2 = dynamic_cast<Child*>(p2);
//	if (c2)
//	{
//		c2->print();
//		c2->show();
//	}
//	/*Child* c = dynamic_cast<Child*>(p);
//	c->print();
//	c->show();*/
//	return 0;
//}